export default {
    /**
    * @description 去除字符串前后空格
    * @param {String} str
    * @return {String} 去除空格之后的字符串
    */
    trim(str) {
        return str.replace(/(^\s*)|(\s*$)/g, '')
    },

    /**
     * @description 去除字符串所有空格
     * @param {String} str
     * @return {String} 去除空格之后的字符串
     */
    trimAll(str) {
        return str.replace(/\s*/g, '')
    },

    /**
    * @description 格式化字符串（文本替换）
    * @param {String} str 源字符串。如：'确定要{0}单据【{1}】吗？'
    * @param {*} args 要替换的参数。如：'删除', 'QZYDYJZB201901300002'
    * @return {String} 如：'确定要删除单据【QZYDYJZB201901300002】吗？'
    */
    format(str, args) {
        for (let i = 1, len = arguments.length; i < len; i++) {
            let reg = new RegExp('\\{' + (i - 1) + '\\}', 'gm')
            arguments[0] = arguments[0].replace(reg, arguments[i])
        }
        return arguments[0]
    },

    /**
     * @description 判断字符串是否以指定字符串开头
     * @param {String} str 源字符串
     * @param {String} searchString 要查询的字符串
     * @param {Boolean} ignoreCase 是否忽略大小写，默认false
     * @return {Boolean}
     */
    isStartWith(str, searchString, ignoreCase) {
        if (str === null || str === undefined) return false
        let preSubStr = str.substring(0, searchString.length) + ''
        if (ignoreCase) {
            preSubStr = preSubStr.toLowerCase()
            searchString = (searchString + '').toLowerCase()
        }
        return preSubStr === searchString
    },
    /**
     * @description 判断字符串是否以指定字符串结束
     * @param {String} str 源字符串
     * @param {String} searchString 要查询的字符串
     * @param {Boolean} ignoreCase 是否忽略大小写，默认false
     * @return {Boolean}
     */
    isEndWith(str, searchString, ignoreCase) {
        if (str === null || str === undefined) return false
        let lastSubStr = str.substring(str.length - searchString.length, str.length) + ''
        if (ignoreCase) {
            lastSubStr = lastSubStr.toLowerCase()
            searchString = (searchString + '').toLowerCase()
        }
        return lastSubStr === searchString
    },

    /**
     * @description 首字母小写
     * @param {String} str 源字符串
     * @return {String}
     */
    firstLowerCase(str) {
        if (this.isEmpty(str)) return ''
        return str.replace(/^\S/, function (s) { return s.toLowerCase() })
    },

    /**
     * @description 首字母大写
     * @param {String} str 源字符串
     * @return {String}
     */
    firstUpperCase(str) {
        if (this.isEmpty(str)) return ''
        return str.replace(/^\S/, function (s) { return s.toUpperCase() })
    },

    /**
     * @description 反转字符串的元素顺序
     * @param {String} str 源字符串
     * @return {String}
     */
    reverse(str) {
        if (this.isEmpty(str)) return ''

        let newStr = ''
        for (let i = str.length - 1; i >= 0; i--) {
            newStr += str[i]
        }
        return newStr
    },

    /**
     * @description 复制文本到剪切板
     * @param text {String} 需要复制的文本内容
     */
    copy(text) {
        let input = window.document.createElement('input')
        input.value = text
        input.select()
        window.document.execCommand('copy')
    },

    /**
     * @description 字母和数字混合的编号自加1（以数字结尾）
     * @param {String} code 编号。例：'XM0001'
     * @return {String} 编号+1。例：'XM0002'
     */
    getNext(code) {
        let part1, part2
        if (/[a-z]/i.test(code)) {
            let x = code.match(/[a-z]/ig)
            part1 = x.join('')
            part2 = code.substring(x.length)
        }
        else {
            part1 = ''
            part2 = code
        }
        let int = parseInt(part2)
        let zero = (part2 + '.').split(int + '.')[0]
        let newPart2 = zero + (int + 1).toString()
        return part1 + newPart2
    }
}